package com.jiaying.sync.config;

import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;

/**
 * MongoDB配置管理类
 */
public class MongoConfig {
    private static final String CONFIG_FILE = "application.properties";
    private Properties properties;
    
    public MongoConfig() {
        loadProperties();
    }
    
    /**
     * 加载配置文件
     */
    private void loadProperties() {
        properties = new Properties();
        try (InputStream input = getClass().getClassLoader().getResourceAsStream(CONFIG_FILE)) {
            if (input == null) {
                System.err.println("无法找到配置文件: " + CONFIG_FILE);
                return;
            }
            properties.load(input);
            System.out.println("成功加载配置文件: " + CONFIG_FILE);
        } catch (IOException ex) {
            System.err.println("加载配置文件失败: " + ex.getMessage());
        }
    }
    
    /**
     * 获取MongoDB集群主机列表
     */
    public String getClusterHosts() {
        return properties.getProperty("mongodb.cluster.hosts", "localhost:27017");
    }
    
    /**
     * 获取数据库名称
     */
    public String getDatabaseName() {
        return properties.getProperty("mongodb.database.name", "testdb");
    }
    
    /**
     * 获取集合名称
     */
    public String getCollectionName() {
        return properties.getProperty("mongodb.collection.name", "testcollection");
    }
    
    /**
     * 获取最大连接数
     */
    public int getMaxConnectionPoolSize() {
        return Integer.parseInt(properties.getProperty("mongodb.connection.pool.max.size", "100"));
    }
    
    /**
     * 获取最小连接数
     */
    public int getMinConnectionPoolSize() {
        return Integer.parseInt(properties.getProperty("mongodb.connection.pool.min.size", "10"));
    }
    
    /**
     * 获取连接超时时间（毫秒）
     */
    public int getConnectionTimeoutMs() {
        return Integer.parseInt(properties.getProperty("mongodb.connection.timeout.ms", "10000"));
    }
    
    /**
     * 获取Socket超时时间（毫秒）
     */
    public int getSocketTimeoutMs() {
        return Integer.parseInt(properties.getProperty("mongodb.socket.timeout.ms", "10000"));
    }
    
    /**
     * 获取服务器选择超时时间（毫秒）
     */
    public int getServerSelectionTimeoutMs() {
        return Integer.parseInt(properties.getProperty("mongodb.server.selection.timeout.ms", "30000"));
    }
    
    /**
     * 获取读偏好设置
     */
    public String getReadPreference() {
        return properties.getProperty("mongodb.read.preference", "primary");
    }
    
    /**
     * 获取写确认级别
     */
    public String getWriteConcern() {
        return properties.getProperty("mongodb.write.concern", "ACKNOWLEDGED");
    }
}